Microprogrammed controllers exist today that are self-verifying. That is, a proper sequence of operations is checked by calculating a check key at predetermined points of the execution of the microcode sequence. The check key is stored in memory for later use in verifying proper microinstruction sequence execution. During runtime, at the last microinstruction in the sequence, a check key is generated. The generated check key is then compared with the stored check key to see if they are the same. If they are the same, then the microcode sequence was executed properly. If they differ, then the sequence is in error.
One of the problems that arises in trying to check entire microcode sequences is checking the execution of conditional branching instructions. This is because branches outside the path taken in calculating the original check key will result in different check keys being calculated for each branch path.
It is an object of the present invention to provide a microprogrammed controller that is self-verifying in which valid branches along the execution path are verified and invalid branches are detected and isolated.